package com.echo.fm.platform.auth;

import com.echo.fm.platform.auth.model.SystemUser;
import com.echo.util.ResultUtils;
import com.echo.util.impl.HeaderParser;
import com.echo.util.impl.MD5Util;
import com.echo.util.impl.ValidateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.UUID;


@Controller
public class IAuthController {
	@Autowired
	@Qualifier("authService")
	protected IAuthService authService;

	@RequestMapping(value = "/web/system/auth/login")
	@ResponseBody
	Object login(HttpServletRequest request, HttpServletResponse response) {
		String userName = request.getParameter("username").trim();
		if (!ValidateUtils.isNotEmpty(userName)) {
			return ResultUtils.instJSONResult(ResultUtils.WEB_PARAM_ERROR_CODE);
		}
		try {
			// request.getSession(false)：若存在会话则返回该会话，否则返回NULL
			/**
			 * 
			 * HttpServletRequest.getSession(ture) 等同于
			 * HttpServletRequest.getSession()，若当前存在Session则返回该会话，否则新建一个Session;
			 * HttpServletRequest.getSession(false)
			 * 若当前存在Session则返回该会话，否则返回NULL，因此，一般情况下，尽量要明确使用参数为false的写法。
			 * session.removeAttribute()适用于清空指定的属性
			 * session.invalidate()是清除当前session的所有相关信息
			 * 
			 * session.invalidate()是让当前浏览器的session销毁，也就是一个session被销毁，比如用户注销就用这个，
			 * 因为注销意味着该用户session中的所有属性均失败，而removeAttribute()可以指定销毁session中的某个属性。
			 */

			HttpSession session = request.getSession(false);
			if (session != null) {
				session.invalidate();// 销毁给用户关联session，例如有的用户强制关闭浏览器，而跟踪用户的信息的session还存在，可是用户已经离开了；
				// 虽然session生命周期浏览默认时间30分钟，但是在30分钟内别的用户还可以访问到前一个用户的页面，销毁用户的session
			}
			SystemUser systemUser = authService.searchSystemUserByUsername(userName);
			String password = request.getParameter("password").trim();

			if (systemUser != null) {
				String enctry = MD5Util.encrypt(password);
//				if (authService.checkPassword(systemUser.getSystemuid(), enctry)) {
//					String token = UUID.randomUUID().toString().replaceAll("-", "");
//					session = request.getSession(true);
//					systemUser.setPassword("");
//					session.setAttribute(token, systemUser);
//					/**
//					 * session的失效时间是60*60*2也就是120分钟，也就是说如果用户停止操作超过120分钟的情况下，
//					 * 再次访问的时候，session失效，典型的应用案例就是用户登录之后走开了120分钟回来的时候需重新登录
//					 */
//					session.setMaxInactiveInterval(3600 * 2);//
//					HeaderParser.setToken(request, response, token);
//					return ResultUtils.instJSONResult(ResultUtils.WEB_SUCCESS_CODE);
				} else {
					return ResultUtils.instJSONResult(ResultUtils.WEB_PASSWORD_ERROR_CODE);
				}
//			} else {
//				return ResultUtils.instJSONResult(ResultUtils.WEB_USERNAME_ERROR_CODE);
//			}

		} catch (Exception e) {

			e.printStackTrace();
			return ResultUtils.instJSONResult(ResultUtils.WEB_DB_SERVER_ERROR_CODE);
		}
		return userName;
	}

	@RequestMapping(value = "/web/system/auth/regist", method = RequestMethod.GET)
	@ResponseBody
	Object regist(@RequestParam("username") String userName, @RequestParam("password") String password,
			@RequestParam("phone") String phone, HttpServletRequest request, HttpServletResponse response) {

		String secret = MD5Util.encrypt(password);
		try {
			authService.registSystemUser(userName, secret, phone);
			return ResultUtils.instJSONResult(ResultUtils.WEB_SUCCESS_CODE);
		} catch (Exception e) {
			e.printStackTrace();
			return ResultUtils.instJSONResult(ResultUtils.WEB_DB_SERVER_ERROR_CODE);
		}
	}

}
